import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, ManyToMany, JoinTable } from 'typeorm';
import { Role } from './Role'

// 实体类 映射为数据库里的一张表
@Entity()
export class User {
    @PrimaryGeneratedColumn()
    id: number;

    @Column({ length: 50 })
    firstName: string;

    @Column({ length: 50 })
    lastName: string;

    @Column({ type: 'int' })
    age: number;

    @Column({ nullable: true, unique: true })       //unique唯一的
    email: string;

    @Column({ type: 'boolean', default: false })
    isActive: boolean;

    @CreateDateColumn()
    createdAt: Date;

    @UpdateDateColumn()
    updatedAt: Date;

    // 多对多01
    /**
     * 在多对多关系中，至少一侧使用 @JoinTable 装饰器。这个装饰器表示这个实体是关系的所有者，并且会在数据库中创建一个联结表，用户保存关联信息
     * 在我们的示例中，@JoinTale 放在User实体的roles属性上，这意味着User实体是关系的所有者，联结表将保存用户和角色之间的关系。
     * */
    @ManyToMany(() => Role, (role) => role.users, {
        cascade: true,   //级联保存，当关联的角色没有保存，关联存在先保存一下角色
    })
    @JoinTable()        //所有者所创建出的表名 user_roles_role
    roles: Role[]
}
